package utils

import (
	"encoding/json"
	"io/ioutil"
	"studygo/sp/a/zinx/ziface"
)

/**
存储一切有关zinx框架的全局参数 供其他模块使用
一些参数可以通过json由用户配置
*/
type GlobalObj struct {
	//全局 sever对象
	TcpServer ziface.IServer
	//当前监控的IP
	Host string
	// 当前主机监控的端口号
	TcpPort int
	//当前服务器的版本号
	Name string
	//当前zinx的版本号
	Version string

	//当前服务器主机运行的最大连接数
	MaxConn int

	// 当前zinx 框架数据包
	MaxPackageSize uint32
}

/**
定义一个全局的Globalobj
*/
var GlocalObject *GlobalObj

/**
从 zinx.json去加载自定义的参数
*/
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/zinx.json")
	if err != nil {
		panic("读取配置文件错误")
	}
	err = json.Unmarshal(data, &GlocalObject)
	if err != nil {
		panic("加载配置文件错误")
	}
}

/**
init 用来初始化当前对象
*/
func init() {
	//如果配置文件没有加载就是默认的值
	GlocalObject = &GlobalObj{
		Name:           "ZinxServerApp",
		Version:        "V0.4",
		TcpPort:        8999,
		Host:           "0.0.0.0",
		MaxConn:        1000,
		MaxPackageSize: 4096,
	}
	//从 配置文件加载
	//TODO 测试时候注释
	GlocalObject.Reload()
}
